home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / libcs / fwantread.c < prev    next >
C/C++ Source or Header  |  1995-06-12  |  4KB  |  107 lines

  1. /*
  2.  * Copyright (c) 1990 Carnegie Mellon University
  3.  * All Rights Reserved.
  4.  * 
  5.  * Permission to use, copy, modify and distribute this software and its
  6.  * documentation is hereby granted, provided that both the copyright
  7.  * notice and this permission notice appear in all copies of the
  8.  * software, derivative works or modified versions, and any portions
  9.  * thereof, and that both notices appear in supporting documentation.
  10.  *
  11.  * THE SOFTWARE IS PROVIDED "AS IS" AND CARNEGIE MELLON UNIVERSITY
  12.  * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
  13.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT
  14.  * SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE FOR ANY SPECIAL, DIRECT,
  15.  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
  16.  * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
  17.  * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  18.  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  19.  *
  20.  * Users of this software agree to return to Carnegie Mellon any
  21.  * improvements or extensions that they make and grant Carnegie the
  22.  * rights to redistribute these changes.
  23.  *
  24.  * Export of this software is permitted only after complying with the
  25.  * regulations of the U.S. Deptartment of Commerce relating to the
  26.  * Export of Technical Data.
  27.  */
  28. /*  fwantread  --  attempt to open file for input
  29.  *
  30.  *  Usage:  f = fwantread (path,file,fullname,prompt);
  31.  *    FILE *f;
  32.  *    char *path,*file,*fullname,*prompt;
  33.  *
  34.  *  Fwantread will search through the specified path for the
  35.  *  specified file, attempting to open it for input if it is
  36.  *  found.  If no such file is found, the user is given
  37.  *  an opportunity to enter a new file name (after the prompt is
  38.  *  printed).  The new file will then be sought using the same
  39.  *  path.
  40.  *  If the path is the null string, the file will be searched for
  41.  *  with no prefix.  If the file name is null, the user will be
  42.  *  prompted for a file name immediately.  The user can always
  43.  *  abort fwantread by typing just a carriage return to the prompt.
  44.  *  Fwantread will put the name of the successfully opened file into
  45.  *  the "fullname" string (which therefore must be long enough to hold a
  46.  *  complete file name), and return its file pointer; if no file
  47.  *  is successfully found, 0 is returned.
  48.  *
  49.  *  HISTORY
  50.  * $Log:    fwantread.c,v $
  51.  * Revision 1.2  90/12/11  17:53:24  mja
  52.  *     Add copyright/disclaimer for distribution.
  53.  * 
  54.  * 21-Oct-81  Fil Alleva (faa) at Carnegie-Mellon University
  55.  *    Fixed bug which caused an infinite loop when getstr() got
  56.  *    an EOT error and returned NULL. The error return was ignored
  57.  *    and the value of "answer" was not changed which caused the loop.
  58.  *
  59.  * 28-Aug-80  Mike Accetta (mja) at Carnegie-Mellon University
  60.  *    Fixed bug which used the "file" string to hold name typed at terminal
  61.  *    even though "file" may have been passed as a constant.
  62.  *
  63.  * 20-Nov-79  Steven Shafer (sas) at Carnegie-Mellon University
  64.  *    Created for VAX.  Nobody can anticipate if it's a win or a lose
  65.  *    to use path-searching; we'll have to see.
  66.  *
  67.  */
  68.  
  69. #include <stdio.h>
  70.  
  71. int strcmp();
  72. FILE *fopenp();
  73. char *getstr();
  74.  
  75. FILE *fwantread (path,file,fullname,prompt)
  76. char *path,*file,*fullname,*prompt;
  77. {
  78.     register FILE *value;
  79.     char myfile[200], *retval;
  80.  
  81.     if (*file == '\0') {
  82.         getstr (prompt,"no file",myfile);
  83.         if (strcmp(myfile,"no file") == 0)  return (0);
  84.     }
  85.     else
  86.         strcpy(myfile, file);
  87.  
  88.     do {
  89.         value = fopenp (path,myfile,fullname,"r");
  90.         if (value == 0) {
  91.             if (*path && (*myfile != '/')) {
  92.                 sprintf (fullname,"Want to read %s in path \"%s\"",myfile,path);
  93.             }
  94.             else {
  95.                 sprintf (fullname,"Want to read %s",myfile);
  96.             }
  97.             perror (fullname);
  98.             retval = getstr (prompt,"no file",myfile);
  99.             if ((strcmp(myfile,"no file") == 0) || retval == NULL)
  100.                 return (0);
  101.         }
  102.     } 
  103.     while (value == 0);
  104.  
  105.     return (value);
  106. }
  107.